package gui;

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Font;
import java.util.LinkedList;

import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.JTextField;
import javax.swing.border.Border;

import mail.Mail;
import mail.MyModelEmail;
import contacts.Owner;

/**
 * klasse erzeugt die Ansicht des Email Clients
 * 
 * @author Michi
 * 
 */
public class MailViewTest extends JPanel {
	/**
	 * Member data
	 */
	private static final long serialVersionUID = -6751516004818400529L;
	private JTextField fromTextField;
	private JTextField betreffTextField;
	private JTextArea mailContentTextArea;

	/**
	 * Konstruktor
	 */
	public MailViewTest() {

		// Standarteinstellungen
		setLayout(new BorderLayout(0, 0));

		// Erzeugen der Grundpanels der Email Liste
		JPanel emailListGroundPanel = new JPanel();
		emailListGroundPanel.setBackground(Color.GRAY);
		emailListGroundPanel.setSize(new Dimension(300, 700));

		// Erzeugen der ScrollPane für die Email Liste und hinzufügen des
		// Grundpanels
		JScrollPane eMailListScrollPane = new JScrollPane(emailListGroundPanel);

		eMailListScrollPane.setPreferredSize(new Dimension(280, 700));
		emailListGroundPanel.setPreferredSize(new Dimension(300, 700));
		emailListGroundPanel.setMinimumSize(new Dimension(260, 700));

		// Hinzufügen der ScrollPane zum Haupt Panel
		add(eMailListScrollPane, BorderLayout.WEST);

		// Erstellen eines Owners für Testzwecke
		Owner owner = new Owner("Michael", "Brandt");
		owner.setEmail("testmail@brotek.eu");
		owner.setImapServer("imap.brotek.eu");
		owner.setMailPass("test123");
		owner.setSmtpServer("smtp.brotek.eu");
		owner.setProvider("imap");

		// Erstellen eines Owners für Testzwecke
		Owner test1 = new Owner("Michael", "Brandt");
		test1.setEmail("testmailsopra@gmail.com");
		test1.setImapServer("imap.gmail.com");
		test1.setMailPass("sopra1213");
		test1.setSmtpServer("smtp.brotek.eu");
		test1.setProvider("imaps");

		// Erstellen eines ModelEmails - Schafft Verbindung zur Funktionalität
		// Email senden/empfangen

		MyModelEmail mme = new MyModelEmail();

		// Erstellen einer LinkedList um dort die empfangenen Emails abzulegen
		LinkedList<Mail> ll = mme.listInbox();

		/**
		 * Int entspricht der Breite eines MailPanels
		 */
		int a = 252;

		/**
		 * Int entspricht der Höhe eines MailPanels
		 */
		int b = 100;

		/**
		 * For Schleife durchläuft die Linked List mit den Emails und erstellt
		 * für jede empfangene Email dynamisch ein Panel und fügt diesem die
		 * Informationen Absender, Betreff und Anfang des Contents hinzu
		 */
		for (int i = 0; i < ll.size(); i++) {
			MailPanel mp = new MailPanel();
			mp.setMail(ll.get(i));
			mp.setFrom(ll.get(i).getFrom());
			mp.setBetreff(ll.get(i).getBetreff());
			mp.setContentText(ll.get(i).getText());
			emailListGroundPanel.add(mp);

			/**
			 * Workarround, da die ScrollPane es nicht merkt, wenn dynamisch
			 * Panels hinzugefügt werden Höhe des GroundPanels wird dynamisch
			 * mit der Anzahl der geaddeten Panels multipliziert und
			 * dementsprechnd angepasst
			 */
			emailListGroundPanel.setPreferredSize(new Dimension(a,
					((i + 1) * b)));
		}

		// Panel für Großansicht der Email wird erzeugt
		JPanel eMailViewGroundPane = new JPanel();
		eMailViewGroundPane.setMaximumSize(new Dimension(250, 400));
		eMailViewGroundPane.setSize(new Dimension(250, 400));

		// JScrolPane der Email Großansicht wird erzeugt und das Grundpanel
		// hinzugefügt
		JScrollPane eMailViewScrollPane = new JScrollPane(eMailViewGroundPane);
		eMailViewScrollPane.setMaximumSize(new Dimension(250, 400));
		eMailViewScrollPane.setPreferredSize(new Dimension(250, 400));
		eMailViewScrollPane.setMinimumSize(new Dimension(250, 400));
		eMailViewGroundPane.setBackground(Color.GRAY);
		eMailViewGroundPane.setMinimumSize(new Dimension(250, 400));
		eMailViewGroundPane.setPreferredSize(new Dimension(250, 400));

		// ScrollPane wird dem Haupt Panel hinzugefügt
		add(eMailViewScrollPane, BorderLayout.CENTER);

		// Layout des Panels wird gesetzt
		eMailViewGroundPane.setLayout(new BorderLayout(0, 0));

		/**
		 * FromTextField enthält den Absender einer Email
		 */
		fromTextField = new JTextField();
		fromTextField.setFont(new Font("Lucida Grande", Font.BOLD, 14));
		fromTextField.setEnabled(false);
		fromTextField.setEditable(false);
		fromTextField.setText("Absender");
		fromTextField.setDisabledTextColor(Color.BLACK);
		fromTextField.setSize(new Dimension(250, 28));
		fromTextField.setMinimumSize(new Dimension(250, 28));
		fromTextField.setMaximumSize(new Dimension(250, 28));
		fromTextField.setPreferredSize(new Dimension(250, 28));
		eMailViewGroundPane.add(fromTextField, BorderLayout.NORTH);
		fromTextField.setColumns(10);

		/**
		 * betreffTextField enthält den Betreff einer Email
		 */
		betreffTextField = new JTextField();
		betreffTextField.setEnabled(false);
		betreffTextField.setEditable(false);
		betreffTextField.setText("Betreff");
		betreffTextField.setSize(new Dimension(250, 28));
		// betreffTextField.setPreferredSize(new Dimension(250, 28));
		// betreffTextField.setMinimumSize(new Dimension(250, 28));
		// betreffTextField.setMaximumSize(new Dimension(250, 28));
		betreffTextField.setMaximumSize(betreffTextField.getMinimumSize());
		eMailViewGroundPane.add(betreffTextField, BorderLayout.CENTER);
		betreffTextField.setColumns(10);

		/**
		 * mailContentTextArea zeigt Inhalt der Email an
		 */
		mailContentTextArea = new JTextArea();
		mailContentTextArea.setDisabledTextColor(Color.BLACK);
		mailContentTextArea.setEnabled(false);
		mailContentTextArea.setEditable(false);
		mailContentTextArea
				.setText("Lorem IpsumLorem IpsumLorem IpsumLorem IpsumLorem IpsumLorem IpsumLorem IpsumLorem IpsumLorem IpsumLorem IpsumLorem IpsumLorem IpsumLorem IpsumLorem IpsumLorem IpsumLorem IpsumLorem IpsumLorem IpsumLorem IpsumLorem IpsumLorem IpsumLorem IpsumLorem IpsumLorem IpsumLorem IpsumLorem IpsumLorem IpsumLorem IpsumLorem IpsumLorem IpsumLorem IpsumLorem IpsumLorem IpsumLorem IpsumLorem IpsumLorem IpsumLorem IpsumLorem Ipsum");
		mailContentTextArea.setOpaque(false);
		mailContentTextArea.setSize(new Dimension(250, 200));
		mailContentTextArea.setBorder(getFromBorder());
		mailContentTextArea.setPreferredSize(new Dimension(250, 400));
		mailContentTextArea.setMinimumSize(new Dimension(250, 400));
		mailContentTextArea.setMaximumSize(new Dimension(250, 400));
		eMailViewGroundPane.add(mailContentTextArea, BorderLayout.SOUTH);

		// Macht Haupt panel sichtbar
		setVisible(true);
	}

	// Workarround um mailContentTextArea den gleichen Rahmen zu geben wie den
	// TextFields
	public Border getFromBorder() {
		return fromTextField.getBorder();
	}

	public static void main(String[] args) {
		new MailViewTest();
	}
}
